package com.zendesk.maxwell.util;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Auther: miaoguoxin
 * @Date: 2021/12/24 15:32
 * @Description:
 */
public class CollUtil {

	public static Integer countCapMaxNum(Integer size, Integer listSize) {
		return size % listSize == 0 ? size / listSize : (size / listSize) + 1;

	}

	/**
	 * 计算切分次数
	 * @param size 需要分割的集合长度
	 * @param maxNum 集合最大的数量
	 * @return 切分次数
	 */
	private static Integer countStep(Integer size, Integer maxNum) {
		return (size + maxNum - 1) / maxNum;
	}

	/**
	 * 将一个集合进行分割
	 * @param collections 需要分割的集合 (List LinkedHashSet TreeSet LinkedList)
	 * @param maxNum 集合最大的数量
	 * @param <T>
	 * @return 分割后的集合
	 */
	public static <T> Collection<Collection<T>> subCollection(Collection<T> collections, int maxNum) {
		int limit = countStep(collections.size(), maxNum);
		//方法二：获取分割后的集合
		return Stream.iterate(
				0, n -> n + 1).limit(limit).parallel().map(
				a -> collections.stream().skip(a * maxNum).limit(maxNum).parallel()
						.collect(Collectors.toList())).collect(Collectors.toList());
	}

}
